﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Portfolio.IViews.Admin;
using Portfolio.Presenters.Admin;
using Portfolio.Entities;
using Portfolio.UI.Common;
using CKEditor.NET;
using Portfolio.BL.Common;

namespace Portfolio.UI.Admin.Controls
{
    /// <summary>
    /// Klasa programowa kontrolka użytkownika.
    /// Odpowiedzialna za wykonywanie modyfikacje kategorii artykułów. 
    /// </summary>
    public partial class AdminEditArticleCategoryDetailsViewControl : System.Web.UI.UserControl, IAdminEditArticleCategoryView
    {
        /// <summary>
        /// Metoda programowa page.
        /// Podczas ładowania, uruchamia zdarzenia i wyświetla komunikaty o błędach. 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (LoadArticleCategory != null)
                {
                    if (IdArticleCategory == 0)
                    {
                        dvEditCategory.ChangeMode(DetailsViewMode.Insert);
                    }
                    else
                    {
                        dvEditCategory.ChangeMode(DetailsViewMode.Edit);
                    }
                    LoadArticleCategory(this, EventArgs.Empty);
                }
                if (LoadFieldsDropDownList != null)
                {
                    LoadFieldsDropDownList(this, EventArgs.Empty);
                }                          
            }

            if (MySession.Current.MessageError != null)
            {
                PublishException = MySession.Current.MessageError;
                MySession.Current.MessageError = null;
            }

            if (MySession.Current.InformationSuccess != null)
            {
               divInformationSuccess.Visible = true;
               lblInforamtionSuccess.Text = MySession.Current.InformationSuccess;
               MySession.Current.InformationSuccess = null;
            }

            if (MySession.Current.InformationNotice != null)
            {
                divInformationSuccess.Visible = true;
                lblInforamtionSuccess.Text = MySession.Current.InformationNotice;
                MySession.Current.InformationNotice = null;
            }

        }

        /// <summary>
        /// Metoda programowa ImageButton.
        /// Wykonuje operacje kliknięcia zapisz i wyjdź.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void imgbtnSaveExit_Click(object sender, EventArgs e)
        {
            switch (IdArticleCategory)
            {
                case 0:
                    if (InsertArticleCategory != null)
                    {
                        InsertArticleCategory(this, EventArgs.Empty);
                    }
                    break;

                default:
                    if (UpdateArticleCategory != null)
                    {
                        UpdateArticleCategory(this, EventArgs.Empty);
                    }
                    break;
            }
 
            if (!this.divError.Visible)
            {
                //Session["message_error"] = 1;
                Response.Redirect("~/Admin/AdminArticleCategories.aspx");
            }
        }

        /// <summary>
        /// Metoda programowa ImageButton.
        ///  Wykonuje operacje kliknięcia anuluj.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void imgbtnCancel_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Admin/AdminArticleCategories.aspx");
        }


        /// <summary>
        /// Metoda programowa ImageButton.
        ///  Wykonuje operacje kliknięcia zapisz(zastosuj).
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void imgbtnSave_Click(object sender, ImageClickEventArgs e)
        {            
            switch (IdArticleCategory)
            {
                case 0:
                    if (InsertArticleCategory != null)
                    {
                        InsertArticleCategory(this, EventArgs.Empty);
                    }
                    break;

                default:
                    if (UpdateArticleCategory != null)
                    {
                        UpdateArticleCategory(this, EventArgs.Empty);
                    }
                    break;
            }            
        }

        /// <summary>
        /// Implementowanie publicznego Interfejsu.
        /// </summary>
        #region IAdminEditArticleDetailsView members

        public event EventHandler<EventArgs> LoadArticleCategory;
        public event EventHandler<EventArgs> LoadFieldsDropDownList;        
        public event EventHandler<EventArgs> UpdateArticleCategory;
        public event EventHandler<EventArgs> InsertArticleCategory;

        /// <summary>
        /// Właściwość interfejsu.
        /// Odpowiedzialny za ustawienie danych w DetailsView 
        /// </summary>
        public ArticleCategoryT ArticleCategoryDataBind
        {
            set
            {
                List<ArticleCategoryT> listDS = new List<ArticleCategoryT>();
                listDS.Add(value);
                dvEditCategory.DataSource = listDS;
                dvEditCategory.DataBind();
            }
        }

        /// <summary>
        /// Właściwość interfejsu.
        /// Odpowiedzialny za ustawienie ArticleCategoryID 
        /// </summary>
        public int IdArticleCategory
        {
            get
            {
                if (Request.QueryString["articleCategoryId"] != null)
                {
                    return Int32.Parse(Request.QueryString["articleCategoryId"]);
                }
                return 0;
            }
            set
            {
                Response.Redirect("~/Admin/AdminEditArticleCategory.aspx?articleCategoryId=" + value, false);
            }
        }

        /// <summary>
        /// Właściwość interfejsu.
        /// Odpowiedzialny za ustawienie obiektu POCO ArticleCategery 
        /// </summary>
        public ArticleCategoryT ArticleCategoriesData
        {
            get
            {
                ArticleCategoryT _articleCategoryT = new ArticleCategoryT();
                _articleCategoryT.ArticleCategoryID = IdArticleCategory;
                DropDownList _ddlCategories = (DropDownList)dvEditCategory.FindControl("ddlCategories");
                if (_ddlCategories.SelectedValue != "")
                {
                    _articleCategoryT.ArticleCategoryIDID = Int32.Parse(_ddlCategories.SelectedValue);
                }
                _ddlCategories = (DropDownList)dvEditCategory.FindControl("ddlStatus");
                _articleCategoryT.Status = Int16.Parse(_ddlCategories.SelectedValue);                
                CheckBox _cbActiveFlag = (CheckBox)dvEditCategory.FindControl("cbActiveFlag");
                _articleCategoryT.ActiveFlag = _cbActiveFlag.Checked;
                _articleCategoryT.ModifiedDate = DateTime.Now;
                TextBox _txtTemp = (TextBox)dvEditCategory.FindControl("txtTitle");
                _articleCategoryT.Name = _txtTemp.Text;                                
                CKEditorControl _ckeTemp = (CKEditorControl)dvEditCategory.FindControl("ckeText");
                _articleCategoryT.Description = _ckeTemp.Text;

                return _articleCategoryT;
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Właściwość interfejsu.
        /// Odpowiedzialny za ustawienie listy ArticleCategery do DropDownList 
        /// </summary>
        public IViews.Common.DataSourceContainer ArticleCategoriesDataSource
        {
            set
            {
                DropDownList ddlCategories = (DropDownList)dvEditCategory.FindControl("ddlCategories");
                ddlCategories.DataSource = value.DataSource;
                ddlCategories.DataTextField = value.DataTextFieldName;
                ddlCategories.DataValueField = value.DataValueFieldName;
                ddlCategories.DataBind();
                if ((value.DataSelectedValue != 0) && (value.DataSelectedValue != null))
                {
                    ddlCategories.Items.FindByValue(value.DataSelectedValue.ToString()).Selected = true;
                }
            }   
        }
        
        /// <summary>
        /// Właściwość interfejsu.
        /// Odpowiedzialny za ustawienie listy Statusów do DropDownList 
        /// </summary>
        public IViews.Common.DataSourceContainer StatusDataSource
        {
            set
            {
                DropDownList ddlStatus = (DropDownList)dvEditCategory.FindControl("ddlStatus");
                ddlStatus.DataSource = value.DataSource;
                ddlStatus.DataTextField = value.DataTextFieldName;
                ddlStatus.DataValueField = value.DataValueFieldName;
                ddlStatus.DataBind();
                if (value.DataSelectedValue != null)
                {
                    ddlStatus.Items.FindByValue(value.DataSelectedValue.ToString()).Selected = true;
                }
            }
        }

        /// <summary>
        /// Właściwość interfejsu
        /// Odpowiedzialny włączenie DDLArticleCategories na formularzu
        /// </summary>
        public Boolean DDLArticleCategoriesEnabled
        {
            set
            {
                ((DropDownList)dvEditCategory.FindControl("ddlCategories")).Visible = value;   
            }
        } 

        /// <summary>
        /// Właściwość interfejsu
        /// Odpowiedzialny za ustawienie i wyświetlanie an stronie pozytywnych komunikatów.
        /// </summary>
        public string PublishInformationSuccess
        {            
            set
            {
                if (value != null)
                {
                    MySession.Current.InformationSuccess = value;
                    divInformationSuccess.Visible = true;
                    lblInforamtionSuccess.Text = value;
                }
            }
        }

        /// <summary>
        /// Właściwość interfejsu
        /// Odpowiedzialny za ustawienie i wyświetlanie an stronie neutralnzch komunikatów.
        /// </summary>
        public string PublishInformationNotice
        {
            set
            {
                if (value != null)
                {
                    divInformationNotice.Visible = true;
                    lblInforamtionNotice.Text = value;
                    MySession.Current.InformationNotice = value;
                }
            }
            
        }

        /// <summary>
        /// Właściwość interfejsu
        /// Odpowiedzialny za ustawienie i wyświetlanie an stronie krytycznych komunikatów.
        /// </summary>
        public string PublishException
        {
            set
            {
                if (value != null)
                {
                    this.divError.Visible = true;
                    this.valCustom.ErrorMessage = value;
                    this.valCustom.IsValid = false;
                    MySession.Current.MessageError = value;
                }
            }
        }       

        #endregion          

       
    }
}